
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<HTML>

<HEAD>
   <TITLE>valid_c</TITLE>
</HEAD>

<BODY style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<A name="TOP"></A>

<table style="text-align: left; margin-left: auto; margin-right: auto; width: 800px;"
 border="0" cellpadding="5" cellspacing="2">
  <tbody>
    <tr>
      <td style="background-color: rgb(153, 153, 153); vertical-align: middle; text-align: center;">
      <div align="right"> 
      <small><small><a href="index.html">Index Page</a></small></small>
      </div>
      <b>valid_c</b> </td>
    </tr>

    <tr>
      <td style="vertical-align: top;">

<small><div align="center">
<A HREF="index.html#A">A</A>&nbsp;
<A HREF="index.html#B">B</A>&nbsp;
<A HREF="index.html#C">C</A>&nbsp;
<A HREF="index.html#D">D</A>&nbsp;
<A HREF="index.html#E">E</A>&nbsp;
<A HREF="index.html#F">F</A>&nbsp;
<A HREF="index.html#G">G</A>&nbsp;
<A HREF="index.html#H">H</A>&nbsp;
<A HREF="index.html#I">I</A>&nbsp;
<A HREF="index.html#J">J</A>&nbsp;
<A HREF="index.html#K">K</A>&nbsp;
<A HREF="index.html#L">L</A>&nbsp;
<A HREF="index.html#M">M</A>&nbsp;
<A HREF="index.html#N">N</A>&nbsp;
<A HREF="index.html#O">O</A>&nbsp;
<A HREF="index.html#P">P</A>&nbsp;
<A HREF="index.html#Q">Q</A>&nbsp;
<A HREF="index.html#R">R</A>&nbsp;
<A HREF="index.html#S">S</A>&nbsp;
<A HREF="index.html#T">T</A>&nbsp;
<A HREF="index.html#U">U</A>&nbsp;
<A HREF="index.html#V">V</A>&nbsp;
<A HREF="index.html#W">W</A>&nbsp;
<A HREF="index.html#X">X</A>&nbsp;
</div></small>
       <br>
       <table style="text-align: left; width: 60%; margin-left: auto; margin-right: auto;"
       border="0" cellspacing="2" cellpadding="2">
        <tbody>
          <tr>
            <td style="width: 50%; text-align: center;">
            <small>
              <a href="#Procedure">Procedure<br></a>
              <a href="#Abstract">Abstract<br></a>
              <a href="#Required_Reading">Required_Reading<br></a>
              <a href="#Keywords">Keywords<br></a>
              <a href="#Brief_I/O">Brief_I/O<br></a>
              <a href="#Detailed_Input">Detailed_Input<br></a>

              </small>
              </td>
              <td style="vertical-align: top; width: 50%; text-align: center;">
              <small>               <a href="#Detailed_Output">Detailed_Output<br></a>
              <a href="#Parameters">Parameters<br></a>
              <a href="#Exceptions">Exceptions<br></a>
              <a href="#Files">Files<br></a>
              <a href="#Particulars">Particulars<br></a>
              <a href="#Examples">Examples<br></a>

              </small>
              </td>
              <td style="vertical-align: top; width: 50%; text-align: center;">
              <small>               <a href="#Restrictions">Restrictions<br></a>
              <a href="#Literature_References">Literature_References<br></a>
              <a href="#Author_and_Institution">Author_and_Institution<br></a>
              <a href="#Version">Version<br></a>
              <a href="#Index_Entries">Index_Entries<br></a>
             </small>
            </td>
          </tr>
        </tbody>
</table>

<h4><a name="Procedure">Procedure</a></h4>
<PRE>
   void valid_c (  SpiceInt      size,
                   SpiceInt      n,
                   SpiceCell   * set   )
 
</PRE>
<h4><a name="Abstract">Abstract</a></h4>
<PRE>
 
   Create a valid CSPICE set from a CSPICE Cell of any data type.
 </PRE>
<h4><a name="Required_Reading">Required_Reading</a></h4>
<PRE>
 
   <a href="../req/sets.html">SETS</a>
 </PRE>
<h4><a name="Keywords">Keywords</a></h4>
<PRE>
 
   CELLS, SETS
 

 </PRE>
<h4><a name="Brief_I/O">Brief_I/O</a></h4>
<PRE>
 
   VARIABLE  I/O  DESCRIPTION
   --------  ---  --------------------------------------------------
   size       I   Size (maximum cardinality) of the set.
   n          I   Initial no. of (possibly non-distinct) elements.
   set       I/O  Set to be validated.
 </PRE>
<h4><a name="Detailed_Input">Detailed_Input</a></h4>
<PRE>
 
   size        is the maximum cardinality (number of elements)
               of the set.  size must not exceed the declared size
               of the set's data array.
 
   n           is the number of (possibly non-distinct) elements
               initially contained in the set's data array.
               N cannot be greater than the size of the set.
 
   set         is a CSPICE set.  set must be declared as a character,
               double precision, or integer SpiceCell.
 
               On input, set contains n elements.
 </PRE>
<h4><a name="Detailed_Output">Detailed_Output</a></h4>
<PRE>
 
   set         on output is a valid set created from the input set.
 
               To create a valid set, the elements are ordered, and
               duplicate elements are removed.  The set's size and
               cardinality members are assigned their correct values.
 
               The set is ready for use with other set routines.
 
               When validating a character set, trailing blanks are not
               considered significant in process of sorting and
               removing duplicates.  Trailing blanks are not preserved
               on output.
</PRE>
<h4><a name="Parameters">Parameters</a></h4>
<PRE>
 
   None.
 </PRE>
<h4><a name="Exceptions">Exceptions</a></h4>
<PRE>
 
   1)   If the size of the set is too small to hold the set
        BEFORE validation, the error SPICE(INVALIDSIZE) is signaled.
        The set is not modified.
 </PRE>
<h4><a name="Files">Files</a></h4>
<PRE>
 
   None.
 </PRE>
<h4><a name="Particulars">Particulars</a></h4>
<PRE>
 
   Because a set is ordered and contains distinct values, to create a
   set from a cell, it is necessary to sort the data array and remove
   duplicates. Once the array has been sorted, duplicate elements
   (adjacent after sorting) are removed. The size and cardinality of
   the set are initialized, and the set is ready to go.
 
   This routine is typically used to create a CSPICE set from a CSPICE
   cell whose array which has been initialized via calls the appnd*_c
   routines, or through compile-time array initializers, or I/O
   statements.  The resulting set can then be used with the other set
   routines.
 
   When a set is constructed from a large set of unordered values,
   it is far more efficient to append the values to the set and
   then validate the set, than to build up the set via calls to the
   insrt*_c routines.  The latter sort the set and remove duplicates
   on each insertion.
 
   Because validation is done in place, there is no chance of
   overflow.
 </PRE>
<h4><a name="Examples">Examples</a></h4>
<PRE>
 
   1) Build a double precision cell via a series of calls to <a href="appndd_c.html">appndd_c</a>.
      Create a set from this set by calling <b>valid_c</b>.
 
         #include &quot;SpiceUsr.h&quot;
 
         int main()
         {
            /.
            Declare the set.  SETSIZ is the maximum capacity of the set.
            ./
            #define SETSIZ          1000000

            SPICEDOUBLE_CELL ( dpSet, SETSIZ );
 
            /.
            INISIZ will be the initial number of elements in the set.
            ./
            #define INISIZ          100000

            /.
            Other local variables:
            ./
            SpiceInt                i;

            /.
            Initialize the cell's data array.  We use bogus values to
            simplify the example.
            ./
            for ( i = 0;  i &lt; INISIZ;  i++ )
            {
               <a href="appndd_c.html">appndd_c</a> (  (SpiceDouble)(-i),  &amp;dpset  );
            }
 
            /.
            Validate the set.  The elements of the set will be arranged
            in increasing order after this call.
            ./
            <b>valid_c</b> ( SETSIZ, INISIZ, &amp;dpSet );
 
            return ( 0 );
         }
 
 </PRE>
<h4><a name="Restrictions">Restrictions</a></h4>
<PRE>
 
   None.
 </PRE>
<h4><a name="Literature_References">Literature_References</a></h4>
<PRE>
 
   1) String comparisons performed by this routine are Fortran-style:
      trailing blanks in the input sets are ignored. This gives
      consistent behavior with CSPICE code generated by the f2c
      translator, as well as with the Fortran SPICE Toolkit.

      Note that this behavior is not identical to that of the ANSI
      C library functions strcmp and strncmp.
 </PRE>
<h4><a name="Author_and_Institution">Author_and_Institution</a></h4>
<PRE>
   N.J. Bachman    (JPL)
   C.A. Curzon     (JPL)
   W.L. Taber      (JPL)
   I.M. Underwood  (JPL)
 </PRE>
<h4><a name="Version">Version</a></h4>
<PRE>
   -CSPICE Version 1.0.1, 12-NOV-2006 (EDW)
 
      Corrected minor type, the Literature_References header
      lacked the prefix &quot;-&quot;.
 
   -CSPICE Version 1.0.0, 08-AUG-2002 (NJB) (CAC) (WLT) (IMU)
 </PRE>
<h4><a name="Index_Entries">Index_Entries</a></h4>
<PRE>
 
   validate a set
 </PRE>
<h4>Link to routine valid_c source file <a href='../../../src/cspice/valid_c.c'>valid_c.c</a> </h4>

      </td>
    </tr>
  </tbody>
</table>

   <pre>Wed Jun  9 13:05:32 2010</pre>

</body>
</html>

